#include "Alarma.h"

Alarma::Alarma(int llamadas, int tiempo, BaseCallback* _callback)
{
	callback = _callback;
	maximo_de_ciclos = tiempo;
	contador_de_ciclos = 0;
	maximo_de_llamadas = llamadas;
	contador_de_llamadas = 0;
	activa = true;
	callback_actualizar = Callback<Alarma>(this,&Alarma::Actualizar);
	Core::Instancia()->AgregarCallback(&callback_actualizar);
}

void Alarma::Actualizar()
{
	contador_de_ciclos++;
	if (contador_de_ciclos>=maximo_de_ciclos)
	{
		contador_de_ciclos = 0;
		(*callback)();
		contador_de_llamadas++;
		if (contador_de_llamadas>=maximo_de_llamadas)
			Desactivar();
	}
}

bool Alarma::Activa() const
{
	return activa;
}

void Alarma::Desactivar()
{
	activa=false;
	Core::Instancia()->EliminarCallback(&callback_actualizar);
}
